package controleur;

import metier.Element;
import utiles.FourmizLogger;

/**
 * Classe executant la simulation
 *
 * @author Thomas Folgueral
 * @author Julien Pernot
 * @author Guillaume Peyet
 * @author Guillaume Sainthillier
 */
public class ThreadSimulation extends Thread {

    private final ControllerSimulation c;
    private boolean isPlaying = false;
    private boolean exit = false;

    /**
     * Constructeur de la simulation
     *
     * @param c le contrôleur qui appelle le thread (utilisé pour connaître le
     * laps de temps entre chaque actions)
     */
    public ThreadSimulation(ControllerSimulation c) {
        this.c = c;
    }

    /**
     * Démarre la simulation, prends tous les élements présents sur la carte et
     * les fait agir tous les n millisecondes
     */
    @Override
    public void run() {
        while (!exit) {
            if (isPlaying) {
                FourmizLogger.debug(this, "TICK");
                for (Element e : this.c.getCarte().getElements()) {
                    e.agir(this.c.getCarte());
                }
                
                this.c.getVueSimulation().updateStats();

                try {
                    sleep(this.c.getTimeTick());
                } catch (InterruptedException ex) {
                    FourmizLogger.error(this.getClass(), ex);
                }
                c.getVueSimulation().setData();
            }
        }
    }

    public boolean isPlaying() {
        return isPlaying;
    }

    public void setPlaying(boolean isPlaying) {
        this.isPlaying = isPlaying;
    }

    public void exit() {
        exit = true;
    }
}
